package com.shuda.business.crm.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shuda.business.crm.entity.FollowUpReminderEntity;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 跟进提醒Service接口
 * @author shuda
 */
public interface FollowUpReminderService {

    /**
     * 分页查询跟进提醒
     * @param page 分页对象
     * @param userId 用户ID
     * @param customerId 客户ID
     * @param reminderStatus 提醒状态
     * @param reminderType 提醒方式
     * @return 分页结果
     */
    IPage<FollowUpReminderEntity> getFollowUpReminderPage(Page<FollowUpReminderEntity> page, 
                                                         Long userId, 
                                                         Long customerId, 
                                                         String reminderStatus, 
                                                         String reminderType);

    /**
     * 根据ID获取跟进提醒
     * @param id 提醒ID
     * @return 跟进提醒
     */
    FollowUpReminderEntity getFollowUpReminderById(Long id);

    /**
     * 根据客户ID获取跟进提醒
     * @param customerId 客户ID
     * @param reminderStatus 提醒状态
     * @return 跟进提醒列表
     */
    List<FollowUpReminderEntity> getFollowUpRemindersByCustomerId(Long customerId, String reminderStatus);

    /**
     * 创建跟进提醒
     * @param reminderEntity 跟进提醒实体
     * @return 是否成功
     */
    boolean createFollowUpReminder(FollowUpReminderEntity reminderEntity);

    /**
     * 更新跟进提醒
     * @param reminderEntity 跟进提醒实体
     * @return 是否成功
     */
    boolean updateFollowUpReminder(FollowUpReminderEntity reminderEntity);

    /**
     * 删除跟进提醒
     * @param id 提醒ID
     * @return 是否成功
     */
    boolean deleteFollowUpReminder(Long id);

    /**
     * 批量删除跟进提醒
     * @param ids 提醒ID数组
     * @return 是否成功
     */
    boolean batchDeleteFollowUpReminder(Long[] ids);

    /**
     * 查询待提醒的记录
     * @param currentTime 当前时间
     * @return 待提醒的记录列表
     */
    List<FollowUpReminderEntity> getPendingReminders(LocalDateTime currentTime);

    /**
     * 执行提醒
     * @param reminderId 提醒ID
     * @return 是否成功
     */
    boolean executeReminder(Long reminderId);

    /**
     * 批量执行提醒
     * @param reminderIds 提醒ID数组
     * @return 是否成功
     */
    boolean batchExecuteReminder(Long[] reminderIds);

    /**
     * 取消提醒
     * @param reminderId 提醒ID
     * @return 是否成功
     */
    boolean cancelReminder(Long reminderId);

    /**
     * 批量取消提醒
     * @param reminderIds 提醒ID数组
     * @return 是否成功
     */
    boolean batchCancelReminder(Long[] reminderIds);

    /**
     * 定时任务：处理待提醒的跟进提醒
     * @return 处理数量
     */
    int processPendingReminders();
}